/**
 * 防抖：对于【短时间内连续触发的事件】，
 *      防抖的含义：【就是让某个时间期限内，事件处理函数只执行一次。】
 * 出现的问题：
 *      在限定时间内，用户不断触发事件执行，理论上事件永远不会执行。
 * 使用场景：页面resize事件，常见于需要页面做适配的时候。需要根据最终页面做dom渲染。
 *          （这种情形一般是使用防抖，因为只需要判断最后一次的变化情况。）
 * @param callback
 * @param delay
 * @returns {Function}
 */
function debounce(callback,delay) {
    var timer = null
    return function () {
        if (timer) {
            /**
             * 当前正在一个计时过程中，又触发了相同事件。
             * 所以要取消当前计时，重新开始计时。
             */
            clearTimeout(timer)
            timer = setTimeout(callback,delay)
        } else {
            alert(2)
            /**
             * 当前并未开始一个计时，所以开启一个计时
             * @type {number}
             */
            timer = setTimeout(callback,delay)
        }
    };
}

function debounce1(func,wait,immediate){
    var timer;
    return function(){
        var context=this,args =arguments;
        if(timer) clearTimeout(timer);
        if(immediate){
            var callNow=!timer;
            timer=setTimeout(function(){
                timer=null;
            },wait);
            if(callNow){
                func.apply(context,args);
            }
        }else{
            timer=setTimeout(function(){
                func.apply(context,args);
            },wait)
        }
    }
}
